package com.itdata.dao;

import java.util.List;

import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateTemplate;


public interface HibernateDao {
	
	/**
	 * 
	 * 添加一个实体
	 * @author 	李松
	 * @date 	2012-2-9
	 * @param 	entity
	 * @throws 	Exception
	 * @return 	void
	 */
	public abstract void add(Object entity)throws Exception;
	
	/**
	 * 删除实体
	 * @author 	李松
	 * @date 	2012-2-9
	 * @param 	id
	 * @param 	clz
	 * @throws 	Exception
	 */
	public abstract void delete(Integer id,  Class<?> clz)throws Exception;
	
	/**
	 * 
	 * 更新实体
	 * @author 	李松
	 * @date 	2012-2-9
	 * @param 	entity
	 * @throws 	Exception
	 * @return 	void
	 */
	public abstract void update(Object entity)throws Exception;
	
	/**
	 * 查询实体 
	 * @author 	李松
	 * @date 	2012-2-9
	 * @param 	id
	 * @param 	clz
	 * @throws 	Exception
	 */
	public abstract Object getObjectByID(Integer id,  Class<?> clz)throws Exception;
	
	
	/**
	 * 
	 * 获取sql查询出的所有结果的条数
	 * @author 	李松
	 * @date 	2012-2-9
	 * @param 	hsql
	 * @throws 	Exception
	 * @return 	int
	 */
	public abstract int getCount(String hsql)throws Exception;
	
	public abstract int countByFindHql(String hql)throws Exception;
	
	public abstract int count(String countHql)throws Exception;
	
	/**
	 * 
	 * 分页查询数据,该方法应当放入事务处理中，让spring来管理session
	 * @author 	李松
	 * @date 	2012-2-9
	 * @param 	hsql
	 * @param 	pageIndex			页码
	 * @param 	pageSize			每页大小
	 * @throws 	Exception
	 * @return 	List<?>
	 */
	public abstract List<?> getObjectList(String hsql,int pageIndex,int pageSize)throws Exception;
	

	/**
	 * 
	 * 根据条件获取所有数据
	 * @author 	李松
	 * @date 	2012-2-9
	 * @param 	hsql
	 * @throws 	Exception
	 * @return 	List<?>
	 */
	public abstract List<?> getAll(String hsql)throws Exception;
	
	/**
	 * 
	 * 执行本地sql
	 * @author 	李松
	 * @date 	2012-2-9
	 * @param 	sql
	 * @throws 	Exception
	 * @return 	void
	 */
	public abstract void executeNativeSql(String sql)throws Exception;
	public abstract Session getHibernateSession()throws Exception;
	public HibernateTemplate getHibernateTemplate();
	
}
